/* 
 * File:   Noeud.h
 * Author: H4314
 *
 * Created on 3 avril 2012, 09:46
 */

#ifndef NOEUD_H
#define	NOEUD_H

#include <iostream>
#include <string>
#include <list>
#include <vector>
#include <iomanip>
#include <boost/regex.hpp>

#define TAG_BEGIN   -1
#define TAG         0
#define TAG_END     1

using namespace std;
using namespace boost;

class Node {
public:
    // Constructeurs & Destructeurs
    virtual ~Node();
    
    // Static
    static void CleanItUp(list<Node *> & nodeList);
    static int NODES;
    
    // Operators
    friend ostream & operator<<(ostream & stream, const Node & node);
   
    // Virtuelles
    
    // Affichage type XML sur ostream. Level doit être mis à 0, colored sert
    // à afficher des couleurs
    virtual void Tree(ostream & stream = cout, int level = 0) const = 0;
    
    // Affichage sous forme d'arbre destiné à un humain
    virtual void Draw(ostream & stream = cout, int level = 0, bool colored = false) const = 0;
    
     // Génère la chaîne permettant d'être validée par expression régulière
    virtual void Print(ostream & stream = cout) const = 0;
    
    // Génère la chaîne permettant de valider par expression régulière
    virtual string createValidationString() const = 0;
    
    // Valide l'élément avec une suite d'expression régulières
    virtual bool validationWithDTD(map<string,regex> *regexs) const = 0;
};

#endif	/* NOEUD_H */
